package iut2.sponsor.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 * Initialise le DockPanel principal en y incluant les differentes parties du site au bon 
 * endroit, et permet de recuperer la liste des sponsors
 */
public class Iut2sponsor implements EntryPoint {
	
	/**
	 * dock contenant tous les widgets de l'application
	 */
	private DockPanel dock = new DockPanel();
	
	private Banniere banniere; //NORD
	private Pied     pied ;    //SUD
	private Contenu  contenu ; //CENTRE
	private Menu     menu;     //OUEST
	
	/**
	 * liste des sponsors enregistres
	 */
	private Sponsors sponsors = new Sponsors();
	
	/**
	 * definition du singleton d point d'entree pour y acceder facilement de toutes les classes
	 */
	public static Iut2sponsor SINGLETON;
	
	/**
	 * definition du nombre de lot necessaire (pour les progressbars)
	 */
	public static int nbLotNecessaires = 60;
	/**
	 * definition du montant total necessaire (pour les progressbars)
	 */
	public static int montantNecessaires = 10000;
	
	/**
	 * instanciation de l'image bundle de l'application
	 */
	private JoyeuseImageBundle imB = (JoyeuseImageBundle) GWT.create(JoyeuseImageBundle.class); 
	
	/**
	 * Create a remote service proxy to talk to the server-side Greeting service.
	 */
	private final GreetingServiceAsync greetingService = GWT
			.create(GreetingService.class);
	
	/**
	 * methode executee au chargement du module et installant tous les composants
	 */
	public void onModuleLoad() {
		SINGLETON = this;
		
		//contruction des elements de la page
		contenu  = new Contenu();  //CENTRE
		menu     = new Menu();     //OUEST
		banniere = new Banniere(); //NORD
		pied     = new Pied();     //SUD
		
		//positionement de tous les elements dans le dockpanel
		dock.add(banniere, DockPanel.NORTH);
		dock.add(pied,     DockPanel.SOUTH);
		dock.add(contenu,  DockPanel.CENTER);
		dock.add(menu,     DockPanel.WEST);
		
		dock.setStyleName("dock");

		recupererSponsors();
		RootPanel.get().add(dock);
	}
	
	/**
	 * @return l'image bundle de l'application
	 */
	public JoyeuseImageBundle getImB() {
		return imB;
	}
	
	/**
	 * @return la liste des sponsors enregistres
	 */
	public Sponsors getSponsors() {
		return sponsors;
	}
	
	/**
	 * @return le panel du contenu de la page
	 */
	public Contenu getContenu() {
		return contenu;
	}
	
	/**
	 * @return la banniere du site
	 */
	public Banniere getBanniere() {
		return banniere;
	}
	
	/**
	 * @return le menu du site
	 */
	public Menu getMenu() {
		return menu;
	}
	
	/**
	 * Recupere la liste des sponsors sur le serveur
	 */
	public void recupererSponsors() {

		AsyncCallback<Sponsors> myMethodCallback = new AsyncCallback<Sponsors>() {
			public void onSuccess(Sponsors result) {
				sponsors = result;
				menu.MAJPanelRecolte();
				menu.selecFlyer();
				menu.selecSponsor();
			}

			public void onFailure(Throwable ex) {
				RootPanel.get().add(new HTML(ex.toString()));
			}
		};

		// Effectuer l'appel au service
		greetingService.greetServer("", myMethodCallback);
	}
	
}
